Option ISN - Lycée St Exupéry
On note x ← 5
L'instruction a ← a + 1 incrémente la variable a
Les variables de type entier peuvent être composées à l'aide des opérations arithmétiques classique : +, −, ×, ^, /, %, ...
Entrée : entier n
Variables : entier s
s ← 2^(2^n)+1
Sortie : s
Les variables de type flottant peuvent être composées à l'aide des opérations classique : +, −, ×, ^, /, sin(.), cos(.), exp(.), ln(.), |.| ...
Entrées : flottant x, flottant y
Variables : flottant s
s ← (x + y)/2
Sortie : s
Les variables de type booléen servent à représenter les valeurs de vérité.
Il n'existe que deux booléens, vrai et faux.
Les booléens peuvent être composés à l'aide des fonctions logiques classiques et, ou et non
Entrées : bool x, bool y
Variables : flottant s
s ← non(x ou y)
Sortie : s
Les fonctions de test <, >, ≤, ≥, = et ≠ renvoient des valeurs booléennes.
Par exemple :
a ← (3 > 1)
b ← (2 ≠ 1)
c ← (Vrai = Faux)
d ← ((4,5 = 4)=Faux)
Les variables de type chaîne servent à représenter les valeurs textuelles.
"4µ�®ĥ#.?ğ☜ÐĶĝFÔضEħƕ&§+仮"
C[i]
le i-ème caractère de la chaîne C
""
la chaîne vide.longueur(C)
est la longueur de C
C
et D
se note C+D
C ← "Hello"
a ← C[0]
b ← ""
n ← longueur(C)
D ← C + "World"
Les listes permettent de regrouper en une variable, des valeurs accessibles par leur indice.
L[i]
le i-ème élément de la chaîne C
[]
la liste vide.longueur(L)
est le nombre d'éléments de L
L ← [3,1,4,1,5,9,2,6,5,3]
n ← longueur(L)
a ← L[0]
z ← L[9]
Comment représenter ce damier ?
- chaque ligne est une liste de 4 valeurs
- chaque valeur vaut : 1 si il y a un pion, 0 sinon
- il y a 4 lignes
D ← [ [0,0,0,1],[0,1,0,0],[0,0,1,0],[0,0,1,0] ]
D[0]
vaut[0,0,0,1]
D[0][3]
vaut 1
Un algorithme doit offrir la possibilité de s'adapter à une situation et de choisir :
Si ... alors ... sinon ...
si condition alors
instructions
fin si
si condition alors
instructions1
sinon
instructions2
fin si
si condition1 alors
instructions1
sinon si condition2 alors
instructions2
sinon si condition3 alors
instructions3
sinon
instructions0
fin si
Entrée : a
Variables : s
si a ≤ 2015
s ← "C'est du passé !"
sinon
s ← "C'est du futur !"
fin si
Sortie : s
Entrée : login
Variables : s
si login ="admin" alors
s ←"Bienvenue Ô Maître"
sinon si login = "guest" alors
s ← "Bienvenue invité"
sinon
s ← "Sortez d'ici !"
fin si
Sortie : s
Entrée : age
Variables : s
si age <6
alors s ←"Gratuit"
sinon si age < 12
alors s ← "Tarif Enfant"
sinon si age < 25
alors s ← "Carte 12-25"
sinon si age < 60
alors s ← "Plein Tarif"
sinon s ← "Tarif Sénior"
fin si
Sortie : s
Un algorithme doit offrir la possibilité de répéter une série d'instructions N fois :
Répéter N fois la même chose ...
Pour i de 1 à N
instructions
fin Pour
Variables : entier S, entier i
Pour i de 1 à 100
S ← S+i
fin pour
Sortie : S
Cet algorithme calcule la somme des nombres entiers de 1 à 100.
Variables : liste L, entier i,
entier l, entier N
N=longueur de L
l=L[N-1]
Pour i de 1 à N−1
L[i] ← L[i-1]
fin pour
L[0]=l
Sortie : L
Décalage de liste la liste d'entrée : à partir de [1,2,3,4], la liste de sortie serait [4,1,2,3].
Un algorithme doit offrir la possibilité de répéter une série d'instructions autant de fois que nécessaire :
Tant que ... on continue
Tant que conditions
instructions
fin Pour
Variables : entier i
i ← 1
Tant que i > 0
i ← i+1
fin Tant que
Sortie : i
La boucle est infinie.
Entrée : flottant x
Variables : entier n
Tant que x≥1
x ← x/2
n ← n+1
fin Tant que
Sortie n
Cet algorithme calcule le logarithme entier de x
Exemple d'algorithme de tri fonctionnant sur une liste de cubes imbricables
- Repérer le plus petit élément
- Le placer en début de liste
- Répéter sur une sous-partie non triée
[52;8;90;3;5;12]
[3;8;90;52;5;12]
[3;5;90;52;8;12]
[3;5;8;52;90;12]
[3;5;8;12;90;52]
[3;8;90;3;52;90]
Entrée : liste L
Variables : entiers n, k, i, réel z
n ← longueur de L
pour i de 1 à n−1
k=indice_min(L,i)
echange(i,k)
fin pour
Sortie : L
Entrée : liste L
Variables : entiers n, k, j
n ← longueur de L
k ← 0
pour j de 1 à n−1
si L[j]≤L[k] alors
k ← j
fin si
fin pour
Sortie : k
Entrée : liste L, entiers i, k
Variables : réel z
z ← L[i]
L[i] ← L[k]
L[k] ← z
n ← longueur de L
pour i de 1 à n−1
k ← i
pour j de i+1 à n−1
si L[j]≤L[k] alors
k ← j
fin si
fin pour
z ← L[i]
L[i] ← L[k]
L[k] ← z
fin pour
[15;7;2;8;16;12]
[7;15;2;8;16;12]
[7;2;15;8;16;12]
[7;2;8;15;16;12]
[7;2;8;15;16;12]
[7;2;8;15;12;16]
[7;2;8;15;12;16]
[2;7;8;15;12;16]
[2;7;8;15;12;16]
[2;7;8;15;12;16]
...
- Inverser les deux premiers si nécessaire
- Avancer et recommencer jusqu'au bout
- Répéter autant de fois que nécessaire
booléen échange_effectué ← vrai
tant que échange_effectué = vrai
PERMUTATIONS(L)
fin tant que
échange_effectué ← faux
pour i de 0 à n−1
si L[i] > L[i + 1]
ECHANGER(i,i+1)
échange_effectué = vrai
fin si
fin pour
Entrée : liste L
Variables : entiers n, i,
booléen échange_effectué
tant que échange_effectué = vrai
échange_effectué ← faux
pour i de 0 à n−1
si L[i] > L[i + 1]
echanger(i,i+1)
échange_effectué = vrai
fin si
fin pour
fin tant que
Sortie : L
Il existe de nombreux algorithmes de tris
Aucun n'est le plus rapide dans tous les cas
Il est possible de comparer certains de ces algorithmes ici